home *** CD-ROM | disk | FTP | other *** search
/ Personal Computer World 2009 February / PCWFEB09.iso / Software / Resources / Chat & Communication / Digsby build 37 / digsby_setup.exe / lib / PIL / ImageMath.pyo (.txt) < prev    next >
Python Compiled Bytecode  |  2008-10-13  |  9KB  |  251 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.5)
  3.  
  4. import Image
  5. import _imagingmath
  6. VERBOSE = 0
  7.  
  8. def _isconstant(v):
  9.     if not isinstance(v, type(0)):
  10.         pass
  11.     return isinstance(v, type(0))
  12.  
  13.  
  14. class _Operand:
  15.     
  16.     def __init__(self, im):
  17.         self.im = im
  18.  
  19.     
  20.     def _Operand__fixup(self, im1):
  21.         if isinstance(im1, _Operand):
  22.             if im1.im.mode in ('1', 'L'):
  23.                 return im1.im.convert('I')
  24.             elif im1.im.mode in ('I', 'F'):
  25.                 return im1.im
  26.             else:
  27.                 raise ValueError, 'unsupported mode: %s' % im1.im.mode
  28.         elif _isconstant(im1) and self.im.mode in ('1', 'L', 'I'):
  29.             return Image.new('I', self.im.size, im1)
  30.         else:
  31.             return Image.new('F', self.im.size, im1)
  32.  
  33.     
  34.     def apply(self, op, im1, im2 = None, mode = None):
  35.         im1 = self._Operand__fixup(im1)
  36.         if im2 is None:
  37.             if not mode:
  38.                 pass
  39.             out = Image.new(im1.mode, im1.size, None)
  40.             im1.load()
  41.             
  42.             try:
  43.                 op = getattr(_imagingmath, op + '_' + im1.mode)
  44.             except AttributeError:
  45.                 raise TypeError, "bad operand type for '%s'" % op
  46.  
  47.             _imagingmath.unop(op, out.im.id, im1.im.id)
  48.         else:
  49.             im2 = self._Operand__fixup(im2)
  50.             if im1.mode != im2.mode:
  51.                 if im1.mode != 'F':
  52.                     im1 = im1.convert('F')
  53.                 
  54.                 if im2.mode != 'F':
  55.                     im2 = im2.convert('F')
  56.                 
  57.                 if im1.mode != im2.mode:
  58.                     raise ValueError, 'mode mismatch'
  59.                 
  60.             
  61.             out = None(Image.new if im1.size != im2.size else im1.mode, im1.size, None)
  62.             im1.load()
  63.             im2.load()
  64.             
  65.             try:
  66.                 op = getattr(_imagingmath, op + '_' + im1.mode)
  67.             except AttributeError:
  68.                 raise TypeError, "bad operand type for '%s'" % op
  69.  
  70.             _imagingmath.binop(op, out.im.id, im1.im.id, im2.im.id)
  71.         return _Operand(out)
  72.  
  73.     
  74.     def __nonzero__(self):
  75.         return self.im.getbbox() is not None
  76.  
  77.     
  78.     def __abs__(self):
  79.         return self.apply('abs', self)
  80.  
  81.     
  82.     def __pos__(self):
  83.         return self
  84.  
  85.     
  86.     def __neg__(self):
  87.         return self.apply('neg', self)
  88.  
  89.     
  90.     def __add__(self, other):
  91.         return self.apply('add', self, other)
  92.  
  93.     
  94.     def __radd__(self, other):
  95.         return self.apply('add', other, self)
  96.  
  97.     
  98.     def __sub__(self, other):
  99.         return self.apply('sub', self, other)
  100.  
  101.     
  102.     def __rsub__(self, other):
  103.         return self.apply('sub', other, self)
  104.  
  105.     
  106.     def __mul__(self, other):
  107.         return self.apply('mul', self, other)
  108.  
  109.     
  110.     def __rmul__(self, other):
  111.         return self.apply('mul', other, self)
  112.  
  113.     
  114.     def __div__(self, other):
  115.         return self.apply('div', self, other)
  116.  
  117.     
  118.     def __rdiv__(self, other):
  119.         return self.apply('div', other, self)
  120.  
  121.     
  122.     def __mod__(self, other):
  123.         return self.apply('mod', self, other)
  124.  
  125.     
  126.     def __rmod__(self, other):
  127.         return self.apply('mod', other, self)
  128.  
  129.     
  130.     def __pow__(self, other):
  131.         return self.apply('pow', self, other)
  132.  
  133.     
  134.     def __rpow__(self, other):
  135.         return self.apply('pow', other, self)
  136.  
  137.     
  138.     def __invert__(self):
  139.         return self.apply('invert', self)
  140.  
  141.     
  142.     def __and__(self, other):
  143.         return self.apply('and', self, other)
  144.  
  145.     
  146.     def __rand__(self, other):
  147.         return self.apply('and', other, self)
  148.  
  149.     
  150.     def __or__(self, other):
  151.         return self.apply('or', self, other)
  152.  
  153.     
  154.     def __ror__(self, other):
  155.         return self.apply('or', other, self)
  156.  
  157.     
  158.     def __xor__(self, other):
  159.         return self.apply('xor', self, other)
  160.  
  161.     
  162.     def __rxor__(self, other):
  163.         return self.apply('xor', other, self)
  164.  
  165.     
  166.     def __lshift__(self, other):
  167.         return self.apply('lshift', self, other)
  168.  
  169.     
  170.     def __rshift__(self, other):
  171.         return self.apply('rshift', self, other)
  172.  
  173.     
  174.     def __eq__(self, other):
  175.         return self.apply('eq', self, other)
  176.  
  177.     
  178.     def __ne__(self, other):
  179.         return self.apply('ne', self, other)
  180.  
  181.     
  182.     def __lt__(self, other):
  183.         return self.apply('lt', self, other)
  184.  
  185.     
  186.     def __le__(self, other):
  187.         return self.apply('le', self, other)
  188.  
  189.     
  190.     def __gt__(self, other):
  191.         return self.apply('gt', self, other)
  192.  
  193.     
  194.     def __ge__(self, other):
  195.         return self.apply('ge', self, other)
  196.  
  197.  
  198.  
  199. def imagemath_int(self):
  200.     return _Operand(self.im.convert('I'))
  201.  
  202.  
  203. def imagemath_float(self):
  204.     return _Operand(self.im.convert('F'))
  205.  
  206.  
  207. def imagemath_equal(self, other):
  208.     return self.apply('eq', self, other, mode = 'I')
  209.  
  210.  
  211. def imagemath_notequal(self, other):
  212.     return self.apply('ne', self, other, mode = 'I')
  213.  
  214.  
  215. def imagemath_min(self, other):
  216.     return self.apply('min', self, other)
  217.  
  218.  
  219. def imagemath_max(self, other):
  220.     return self.apply('max', self, other)
  221.  
  222.  
  223. def imagemath_convert(self, mode):
  224.     return _Operand(self.im.convert(mode))
  225.  
  226. ops = { }
  227. for k, v in globals().items():
  228.     if k[:10] == 'imagemath_':
  229.         ops[k[10:]] = v
  230.         continue
  231.  
  232.  
  233. def eval(expression, _dict = { }, **kw):
  234.     args = ops.copy()
  235.     args.update(_dict)
  236.     args.update(kw)
  237.     for k, v in args.items():
  238.         if hasattr(v, 'im'):
  239.             args[k] = _Operand(v)
  240.             continue
  241.     
  242.     import __builtin__ as __builtin__
  243.     out = __builtin__.eval(expression, args)
  244.     
  245.     try:
  246.         return out.im
  247.     except AttributeError:
  248.         return out
  249.  
  250.  
  251.